package com.itliuhouse.success.domain.query;

//PageQuery是前端提交的查询参数,一般包含四个属性
//pageNo : 页码  pageSize:每页数据条数    sortBy : 排序字段  isAsc : 是否升序
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel(description = "分页查询实体")
public class PageQuery {
    @ApiModelProperty("页码")
    private Long pageNo;

    @ApiModelProperty("每页显示的条数")
    private Long pageSize;

    @ApiModelProperty("排序字段")
    private String sortBy;

    @ApiModelProperty("是否升序")
    private Boolean isAsc;


    public <T>Page<T> toMpPage(OrderItem ... orders){
        //1.分页条件
        Page<T> p = Page.of(pageNo, pageSize);
        //2.排序条件
        //2.1先看前端有没有传递排序字段
        if(sortBy != null){
            OrderItem orderItem = new OrderItem();
            orderItem.setColumn(sortBy);
            orderItem.setAsc(isAsc);
            p.addOrder(orderItem);
            return p;
        }

        //2.再看看有没有手动指定排序字段， 其实就是系统指定的排序字段
        if(orders != null){
            p.addOrder(orders);
        }
        return p;
    }


    //按照系统自定义设置的默认排序走
    public <T> Page<T> toMpPage(String defaultSortBy , boolean isAsc){
        OrderItem orderItem = new OrderItem();
        orderItem.setColumn(defaultSortBy);
        orderItem.setAsc(isAsc);
        return this.toMpPage(orderItem);
    }


    //按照系统的创建时间规则进行排序构建page对象
    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc(){
        OrderItem orderItem = new OrderItem();
        orderItem.setColumn("create_time");
        //使用降序排列
        orderItem.setAsc(false);
        return toMpPage(orderItem);
    }

    //按照系统的更新时间规则进行排序构建page对象
    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc(){
        OrderItem orderItem = new OrderItem();
        orderItem.setColumn("update_time");
        orderItem.setAsc(false);
        return toMpPage(orderItem);
    }








}
